﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Tecnosop.Dominio;
using Tecnosop.WebUI.Infrastructure.Notification;
using System.Data;
using Tecnosop.WebUI.Models;

namespace Tecnosop.WebUI.Controllers
{
    [Authorize]
    public partial class NotaCreditoController : Controller
    {
        private Entidades db = new Entidades();
        //
        // GET: /NotaCredito/

        public virtual ActionResult Index()
        {
            var notas = db.NOTA_DE_CREDITO.Where(n => n.VISIBLE ?? false);
            return View(notas);
        }

        //
        // GET: /NotaCredito/Details/5

        public virtual ActionResult VerTodos()
        {
            var notas = db.NOTA_DE_CREDITO.Where(n => n.VISIBLE ?? false);
            return View(notas.ToList());
        }

        public virtual ActionResult Details(string id)
        {
            NOTA_DE_CREDITO n = db.NOTA_DE_CREDITO.Find(Convert.ToInt32(id));
            return View(n);
        }

        //
        // GET: /NotaCredito/Create

        public virtual ActionResult Create()
        {
            return View();
        } 

        //
        // POST: /NotaCredito/Create

        [HttpPost]
        public virtual ActionResult Create(NotaCreditoViewModel notaVm)
        {
            if (ModelState.IsValid)
            {
                try
                {
          
                    NOTA_DE_CREDITO nota = new NOTA_DE_CREDITO
                    {
                        
                        COMENTARIO = notaVm.COMENTARIO,
                        FECHA_INSTALACION = notaVm.FECHA,
                         //ID_NOTA_CREDITO = 1,
                        ID_NOTA_CREDITO = notaVm.ID_NOTA_CREDITO,
                        RAZON_SOCIL_NC = notaVm.EsRazonSocialTecnosopNota.Value ? "Comercializadora Tecnosop" : "Juan Carlos Maldonado Huerta",
                        MONTO = notaVm.MONTO,
                        NUMERO_FACTURA = notaVm.NUMERO_FACTURA,
                        VISIBLE = true,
                        
                        RAZON_SOCIAL = notaVm.EsRazonSocialTecnosopFactura.Value ? "Comercializadora Tecnosop" : "Juan Carlos Maldonado Huerta"
                       

                    };

                 

                    db.NOTA_DE_CREDITO.Add(nota);
                    db.SaveChanges();
                    this.ShowMessage(MessageType.Success, "Se ha creado exitosamente la nota de crédito", true);
                    return RedirectToAction(Actions.VerTodos());
                
                  }
                catch
                {
                    this.ShowMessage(MessageType.Error, "Ocurrió un error al intentar agregar nota de crédito.", true);
                    return View(notaVm);
                }
            }
            return View(notaVm);
        }
                      
        //
        // GET: /NotaCredito/Edit/5

        public virtual ActionResult Edit(int id, string razon )
        {
            NOTA_DE_CREDITO nota = db.NOTA_DE_CREDITO.Find(id, razon);
        
          
            return View(nota);
        }

        //
        // POST: /NotaCredito/Edit/5

        [HttpPost]
        public virtual ActionResult Edit(NOTA_DE_CREDITO nota)
        {
            if (ModelState.IsValid)
            {
                try
                {
                    // TODO: Add update logic here

                    NOTA_DE_CREDITO notaEditada =  db.NOTA_DE_CREDITO.Find(nota.ID_NOTA_CREDITO);
                    
                         notaEditada.COMENTARIO = nota.COMENTARIO;
                         notaEditada.FECHA_INSTALACION = nota.FECHA_INSTALACION;
                         notaEditada.MONTO = nota.MONTO;
                    
                    db.Entry(notaEditada).State = EntityState.Modified;
                    db.SaveChanges();
                    return RedirectToAction("VerTodos");
                }
                catch
                {
                    return View();
                }
            }
            return View();
        }
        //
        // GET: /NotaCredito/Delete/5

       public virtual ActionResult  Delete(int id, string razon)
        {
            try
            {
            NOTA_DE_CREDITO nota = db.NOTA_DE_CREDITO.Find(id, razon);
            this.ShowMessage(MessageType.Warning, "Está a punto de borrar la nota de crédito [" + nota.ID_NOTA_CREDITO+ "].", false);
            return View(nota);
            }
            catch
            {
                this.ShowMessage(MessageType.Error, "Ocurrio un error al intentar eliminar el cliente.");
                return RedirectToAction(Actions.Index());
            }
        }

        //
        // POST: /NotaCredito/Delete/5
        
        [HttpPost, ActionName("Delete")]
       public virtual ActionResult DeleteConfirmed(int id, string razon)
        {
            try
            {
                NOTA_DE_CREDITO nota = db.NOTA_DE_CREDITO.Find(id, razon);
                nota.VISIBLE = false;

                db.Entry(nota).State = EntityState.Modified;
                //db.CLIENTE.Remove(cliente);
                db.SaveChanges();
                this.ShowMessage(MessageType.Success, "La nota de crédito fue eliminado exitosamente.");
                return RedirectToAction(Actions.VerTodos());
            }
            catch
            {
                this.ShowMessage(MessageType.Error, "Ocurrio un error al intentar eliminar el cliente.");
                return RedirectToAction(Actions.Delete(id, razon));
            }
        }
       
        
        [ChildActionOnly]
        public virtual ActionResult Search()
        {
            return PartialView();
        }

        public virtual ActionResult Busqueda()
        {
            return View();
        }


        public virtual ActionResult ResultadoBusqueda(string Criterios, string AreaBusqueda)
        {
            int codigo;
            switch (Criterios)
            {
                 
                case "Rut":
                    return View(new ResultadoBusquedaNotaCreditoViewModel
                    {
                        Resultado = db.NOTA_DE_CREDITO.Where(c => c.FACTURA.FACTURA_VENTA_DIRECTA.RUT_CLIENTE == AreaBusqueda).ToList(),
                        CriterioParaOrdenar = Criterios
                    });
                case "NumeroNotaCredito":
                    
                    return View(new ResultadoBusquedaNotaCreditoViewModel
                    {

                        Resultado = Int32.TryParse(AreaBusqueda, out codigo)
                        ? db.NOTA_DE_CREDITO.Where(c => c.ID_NOTA_CREDITO == codigo).ToList()
                        : new List<NOTA_DE_CREDITO>(),
                        CriterioParaOrdenar = Criterios
                    });
                case "Tecnosop":
                    
                    return View(new ResultadoBusquedaNotaCreditoViewModel
                    {
                         Resultado = Int32.TryParse(AreaBusqueda, out codigo)
                         ? db.NOTA_DE_CREDITO.Where(c => c.NUMERO_FACTURA == codigo).ToList()
                         : new List<NOTA_DE_CREDITO>(),
                        CriterioParaOrdenar = Criterios
                    });
                default:
                    return PartialView(Views.Search);
            }
        }

        protected override void Dispose(bool disposing)
        {
            db.Dispose();
            base.Dispose(disposing);
        }
    
    }
}
